/*
 * Copyright (c) 2023 fred
 * Licensed under the Apache License,Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */

import { Element } from '../nodes/Element';

export abstract class Evaluator {
  public abstract matches(root: Element, element: Element): boolean;
  /**
   Reset any internal state in this Evaluator before executing a new Collector evaluation.
   */
  reset() {
  }

  /**
   A relative evaluator cost function. During evaluation, Evaluators are sorted by ascending cost as an optimization.
   * @return the relative cost of this Evaluator
   */
  cost(): number {
    // a nominal default cost
    return 5
  }
}
